package org.example;

import java.util.Arrays;

//太复杂
//class Solution {
//
//    private int findGCD(int a, int b) {
//        while (b != 0) {
//            int temp = b;
//            b = a % b;
//            a = temp;
//        }
//        return a;
//    }
//
//    private int next(int i, int k, int n) {
//        return (i + k) % n;
//    }
//
//    public void rotate(int[] nums, int k) {
//        int n = nums.length;
//        k = n - k % n;
//        int gcd = findGCD(n, k);
//        if (gcd == 0) {
//            return;
//        }
//
//        for (int start = 0; start < gcd; start++) {
//            int temp = nums[start];
//            int i = start;
//            for (; next(i, k, n) != start; i = next(i, k, n)) {
//                nums[i] = nums[next(i, k, n)];
//            }
//            nums[i] = temp;
//        }
//    }
//}

//两次反转
class Solution {

    void reverse(int[] nums, int i, int j) {
        j = j - 1;
        while (i < j) {
            int temp = nums[i];
            nums[i] = nums[j];
            nums[j] = temp;
            i++;
            j--;
        }
    }

    public void rotate(int[] nums, int k) {
        k = k % nums.length;
        if (k == 0) {
            return;
        }

        reverse(nums, 0, nums.length);
        reverse(nums, 0, k);
        reverse(nums, k, nums.length);
    }
}

public class Main {
    public static void main(String[] args) {
//        int[] nums = new int[]{1,2,3,4,5,6,7};
//        new Solution().rotate(nums, 3);
//        System.out.println(Arrays.toString(nums));
        int[] nums = new int[]{1,2,3,4,5,6,7,8,9,10,11,12,13};
        new Solution().rotate(nums, 17);
        System.out.println(Arrays.toString(nums));
    }
}